/**
 * 
 */
package br.com.dp.web.interceptador.interceptadores;

import java.io.Serializable;

import javax.inject.Inject;
import javax.interceptor.AroundInvoke;
import javax.interceptor.Interceptor;
import javax.interceptor.InvocationContext;

import br.com.dp.dto.dominio.PerfilEnum;
import br.com.dp.servidor.interceptador.anotacao.Seguranca;
import br.com.dp.web.mbean.login.LoginMBean;


/**
 * @author emmanuel
 * Interceptador responsável por interceptar os métodos que contêm a Annotation {@link Seguranca}
 */
@Interceptor
@Seguranca
public class InterceptadorSeguranca implements Serializable{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 6841460497590881457L;
	
	/**
	 * Como o contexto utilizado por este MBean é o CDI, então podemos dá um Inject em LoginMBean.
	 * Já que o escopo é SessionScope, isso fará, com que os dados em sessão do login possam ser manipulados.
	 */
	@Inject
	public LoginMBean loginMBean;

	@AroundInvoke
	public Object interceptar(InvocationContext ic) throws Exception{
		PerfilEnum[] perfis = ic.getMethod().getAnnotation(Seguranca.class).perfil();
		// TODO: Quando os perfis estiverem sendo salvos em sessão no LoginMBean, verificar se os perfis de acesso ao método
		// condizem com os perfis do usuário salvo no LoginMBean.
		return ic.proceed();
	}
}
